[新機能]dbt CloudのCI Jobでdbt Semantic Layerに関連するオブジェクトのチェックも出来るようになりました

[新機能]dbt CloudのCI Jobでdbt Semantic Layerに関連するオブジェクトのチェックも出来るようになりました

Clock Icon2024.07.24

さがらです。

dbt Cloudの2024年7月の新機能として、CI Jobでdbt Semantic Layerに関連するオブジェクトのチェック(validation)も出来るようになりました。

New: Introduced Semantic validations in CI pipelines. Automatically test your semantic nodes (metrics, semantic models, and saved queries) during code reviews by adding warehouse validation checks in your CI job using the dbt sl validate command. You can also validate modified semantic nodes to guarantee code changes made to dbt models don't break these metrics. Refer to Semantic validations in CI to learn about the additional commands and use cases.

https://docs.getdbt.com/docs/dbt-versions/dbt-cloud-release-notes#july-2024

この機能を実際に試してみたので、本記事でまとめてみます。

設定

まず、dbt CloudのCI Jobを設定する必要があります。CI Jobの設定については下記のブログが参考になると思います。

https://dev.classmethod.jp/articles/dbt-cloud-new-ci-job/

この上で、下記ドキュメントの「Use cases」で「recommended」となっているdbt sl validate --select state:modified+コマンドをCI Jobに追加します。これで差分があったオブジェクトでのみ、CIの処理が動くようになります。

https://docs.getdbt.com/docs/deploy/ci-jobs#semantic-validations-in-ci

2024-07-24_09h10_43.png

挙動を確かめてみた

ということで、実際にCI Jobの挙動を確かめてみます。

上流に位置するModelの内容を変更した場合

Semantic Modelとして参照されているcustomers.sqlについて、Metricsにも使用されているcount_lifetime_ordersというカラムをコメントアウトしてみます。

2024-07-24_09h31_22.png

この状態で、Pull Requestを作成すると、下図のようにCI Jobが動きました。

2024-07-24_09h35_41.png

dbt sl validate --select state:modified+の内容を見ると、customers.sqlを変更したため、customers.ymlで定義しているsemantic_modelsmetricsについて検知がされたようです。(何度か試していますが、saved_queriesは都度対象のdbt projectで定義しているすべてのsaved_queriesが検知されるようです。)

2024-07-24_09h41_20.png

また、実際に接続先のDWH上ではどのようなクエリが動いているのかを見ると、下図のようにEXPLAIN文が実行されていました。実行計画がちゃんと作れるかどうかを見て、バリデーションを行っているようです。(ただ、実際にエラーとなったMetricsについてのEXPLAIN文の実行履歴がなく…ちょっと挙動がわからないところは正直あります。)

2024-07-24_09h42_26.png

2024-07-24_09h46_08.png

Metricsの定義だけを変更した場合

average_order_valueというMetricsの計算式を変更した場合にどのような挙動となるかを確認してみます。

2024-07-24_09h15_05.png

Pull Requestを作ると下図のようにCI Jobが動きます。

2024-07-24_09h19_48.png

dbt sl validate --select state:modified+の内容を見ると、変更したMetricsについては検知されませんでした。基本的には、Modelの内容を変更した場合に動作するCIとなっているようです。

2024-07-24_09h22_23.png

最後に

dbt Cloudの2024年7月の新機能として、CI Jobでdbt Semantic Layerに関連するオブジェクトのチェック(validation)が出来るようになったので試してみました。

私が検証した範囲ではCIの処理としてEXPLAIN文が実行されるだけでしたので、DWHのリソースのことも気にせずに使える機能だと感じました!dbt Semantic Layerを使っている方は、ぜひ活用してみてください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.